package com.kaifamiao.config;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.logging.Logger;

public class ConfigurationServlet implements Servlet {

    private Logger logger = Logger.getLogger( this.getClass().getName() );

    private ServletConfig config ;

    public ConfigurationServlet() {
        logger.info( "创建ConfigurationServlet类的实例" );
    }

    // A servlet configuration object used by
    // a servlet container to pass information to a servlet during initialization.
    @Override
    public void init(ServletConfig config) throws ServletException {
        logger.info( "初始化" );
        this.config = config ;
    }

    @Override
    public void service(ServletRequest req , ServletResponse resp)
            throws ServletException, IOException {
        logger.info( "服务" );
        resp.setCharacterEncoding( "UTF-8" );
        resp.setContentType( "text/html" );
        // 获得可以向客户端输出数据的字符打印流
        PrintWriter out = resp.getWriter();
        out.println( "<table>" );
        out.println( "<tr>");
        // 获得 servlet 的名称 ( 即通过 <servlet-name> 指定的值 或 @WebServlet 的 name 属性指定的值 )
        out.println( "<td colspan=\"2\">" + config.getServletName() + "</td>");
        out.println( "</tr>");
        // 获得当前 servlet 实例的配置中所有的 初始化参数名称
        Enumeration<String> initParamNames = config.getInitParameterNames();
        // 使用 Enumeration 提供的支持遍历所有的 初始化参数名称
        while( initParamNames.hasMoreElements() ){
            // 获取单个 初始化参数名称
            String paramName = initParamNames.nextElement();
            // 根据 初始化参数 的 名称 获得初始化参数的值
            String paramValue = config.getInitParameter( paramName );
            out.println( "<tr>");
            out.println( "<td>" + paramName + "</td>");
            out.println( "<td>" + paramValue + "</td>");
            out.println( "</tr>");
        }
        out.println( "</table>" );
    }

    @Override
    public void destroy() {
        logger.info( "销毁" );
    }

    @Override
    public String getServletInfo() {
        return config.getServletName();
    }

    @Override
    public ServletConfig getServletConfig() {
        return this.config ;
    }
}
